프로세서 레지스터
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.
1. 개요
프로세서 레지스터는 프로세서 내부에 위치하며, 데이터를 저장하고 처리하는 데 사용되는 소형 저장 공간이다. 레지스터는 용도에 따라 데이터 레지스터, 주소 레지스터, 범용 레지스터, 부동소수점 레지스터, 특수 레지스터 등으로 분류되며, 프로그램의 실행 속도와 효율성에 큰 영향을 미친다. 다양한 CPU 아키텍처는 각기 다른 수와 종류의 레지스터를 사용하며, 레지스터의 크기는 비트 단위로 측정된다. 레지스터 할당은 컴파일러 최적화의 중요한 주제이며, 프로그래밍 언어의 호출 규약과 밀접하게 관련되어 있다. 한국의 임베디드 시스템, 슈퍼컴퓨터, 게임 산업 등 IT 환경에서도 프로세서 레지스터는 중요한 역할을 수행한다.
더 읽어볼만한 페이지
- 디지털 레지스터 - 명령 레지스터
- 디지털 레지스터 - 시프트 레지스터
시프트 레지스터는 클럭 신호에 따라 데이터를 순차적으로 이동시키는 디지털 회로로, 입출력 방식에 따라 다양한 종류가 있으며, 데이터 변환, 지연 회로, 펄스 폭 확장, 스택 구현, I/O 핀 확장 등 다양한 용도로 활용된다. - 컴퓨터 구조 - PA-RISC
PA-RISC는 휴렛 팩커드에서 개발한 RISC 기반 명령어 집합 아키텍처로, HP 서버 및 워크스테이션에 사용되었으며 대용량 L1 캐시와 SIMD 명령어 확장 등의 특징을 가졌으나 아이테니엄 아키텍처로의 전환으로 단종되었다. - 컴퓨터 구조 - 메모리 관리
메모리 관리는 운영체제의 핵심 기능으로, 여러 프로세스의 원활한 실행을 위해 메모리 공간을 할당하고 관리하며, 릴로케이션, 보호, 공유, 가상 메모리 관리, 자동/수동 메모리 관리 등의 기능을 수행한다. - 중앙 처리 장치 - 마이크로컨트롤러
마이크로컨트롤러는 프로세서, 메모리, 입출력 기능을 단일 칩에 통합하여 임베디드 시스템의 핵심이 되는 부품으로, 프로그램 내장 방식을 통해 소프트웨어만으로 제어 기능 변경이 가능하며, 현재는 32비트 ARM, MIPS 아키텍처 기반 제품이 주를 이루고, 저전력 소모, 소형화, 다양한 기능 통합을 특징으로 다양한 분야에서 활용된다. - 중앙 처리 장치 - NX 비트
NX 비트는 하드웨어 기반 보안 기능으로, 메모리 페이지의 실행 권한을 제어하여 특정 영역에서 코드 실행을 막아 버퍼 오버플로 공격과 같은 보안 위협을 줄이는 데 사용되며, AMD에서 처음 도입 후 다양한 프로세서와 운영체제에서 DEP 등의 이름으로 구현되었다.
프로세서 레지스터 | |
---|---|
기본 정보 | |
유형 | 저장 장치 |
사용 위치 | CPU |
접근 시간 | CPU 클럭 사이클과 동일 |
설명 | |
정의 | 컴퓨터 CPU 내에서 사용되는 소량의 고속 저장 공간 |
용도 | 현재 사용 중인 데이터나 명령어를 저장 빠르게 접근 가능한 저장소 제공 |
구조 및 작동 방식 | |
구성 요소 | 플립플롭 또는 래치 회로로 구성 |
크기 | 일반적으로 8비트에서 64비트 사이 |
속도 | 매우 빠르며, CPU 클럭 속도와 거의 동일한 속도로 작동 |
역할 | MAR : 메모리 주소 저장 MBR : 읽거나 쓸 데이터 저장 PC : 다음에 실행할 명령어의 주소 저장 IR : 현재 실행 중인 명령어 저장 AC : 연산 결과 저장 |
추가 정보 | |
중요성 | CPU 성능에 큰 영향을 미침 |
특징 | 휘발성 메모리 주소를 가지지 않음 (이름으로 접근) |
레지스터 종류 (기능별 분류) | |
자료 레지스터 | 데이터 저장 |
주소 레지스터 | 메모리 주소 저장 |
범용 레지스터 | 다양한 용도로 사용 가능 |
특수 목적 레지스터 | 특정 기능 수행 (예: 프로그램 카운터, 스택 포인터, 상태 레지스터) |
레지스터 종류 (사용자 접근 가능성) | |
사용자 가시 레지스터 | 프로그래머가 직접 접근 가능 |
사용자 불가시 레지스터 | 운영체제만 접근 가능 |
레지스터 뱅크 | |
정의 | 레지스터 세트의 집합 |
사용 이유 | 문맥 전환 속도 향상 인터럽트 처리 효율 증대 |
관련 기술 | |
레지스터 할당 | 컴파일러가 변수를 레지스터에 할당하는 과정 |
2. 레지스터의 종류
레지스터는 용도와 기능에 따라 다양하게 분류된다. 일반적으로 다음과 같은 종류가 있다.
종류 | 설명 |
---|---|
범용 레지스터 | 데이터와 주소를 모두 저장할 수 있다. |
데이터 레지스터 | 정수 값을 저장한다. |
주소 레지스터 | 메모리 주소를 저장하여 메모리 접근에 사용된다. |
부동소수점 레지스터 | 부동소수점 값을 저장한다. |
상수 레지스터 | 0이나 1 등 고정된 값을 저장한다. |
특수 레지스터 | 프로그램 상태를 저장하며, 프로그램 카운터, 스택 포인터, 상태 레지스터 등이 있다. |
명령 레지스터 | 현재 실행 중인 명령어를 저장한다. |
색인 레지스터 | 실행 중에 피연산자의 주소를 계산하는 데 사용된다. |
일부 프로세서에서는 주소 레지스터 대신 색인 레지스터를 사용하여 주소를 조작하기도 한다. 또한, 특정 아키텍처에서는 SPARC 및 MIPS와 같이 정수 레지스터 파일의 일부를 읽을 때 항상 0을 반환하는 '''의사 레지스터'''를 사용하기도 한다.
2. 1. 용도에 따른 분류
- '''데이터 레지스터''': 정수 값을 저장하는 데 사용된다.
- '''주소 레지스터''': 메모리 주소를 저장하며, 메모리 접근에 사용된다. 일부 프로세서에서는 주소 조작을 위해 '''색인 레지스터'''를 사용하기도 한다.
- '''범용 레지스터''' (GPR): 데이터와 주소를 모두 저장할 수 있다.
- '''부동소수점 레지스터''': 부동소수점 값을 저장하는 데 사용된다.
- '''상수 레지스터''': 0이나 1과 같이 고정된 값을 저장한다.
- '''특수 레지스터''': 프로그램의 상태를 저장하며, 프로그램 카운터, 스택 포인터, 상태 레지스터 등이 있다.
- '''명령 레지스터''': 현재 실행 중인 명령어를 저장한다.
- '''색인 레지스터''': 실행 중에 피연산자의 주소를 계산하는 데 사용된다.
2. 2. 특수 목적 레지스터
프로세서는 프로그램 상태의 일부 요소를 저장하는 특수 목적 레지스터(SPR)를 가지고 있다. 여기에는 일반적으로 다음이 포함된다.[1]- 프로그램 카운터(PC): 다음에 실행될 명령어의 주소를 저장한다. 명령어 포인터라고도 한다.[1]
- 상태 레지스터: 명령어 실행 여부를 결정하는 데 사용되는 참/거짓 값을 저장한다. 연산 결과로 발생한 자리 올림, 누산기가 0인 상태 또는 각종 프로세서의 상태를 보존한다.[1]
- 스택 포인터(SP): 런타임 스택을 관리하는 데 사용된다.[1]
프로그램 카운터와 상태 레지스터는 프로그램 상태 워드(PSW) 레지스터에 결합될 수 있다. 스택 포인터도 이 그룹에 포함되기도 한다.[1]
마이크로컨트롤러와 같은 임베디드 마이크로프로세서는 특수화된 하드웨어 요소에 해당하는 특수 기능 레지스터를 가질 수도 있다.[1]
페이징 방식이나 세그먼테이션 방식에서 페이지 선택자나 세그먼트 선택자로 사용하는 레지스터도 특수 목적 레지스터에 속한다.[1]
3. 레지스터의 구성
- 프로그램 계수기(PC): 다음에 실행할 명령어의 주소를 가지고 있다.
- 명령어 레지스터(IR): 현재 수행 중인 명령어를 가지고 있다.
- 메모리 주소 레지스터(MAR): 메모리로부터 읽어오거나 메모리에 쓰기 위한 주소를 가지고 있다.
- 메모리 버퍼 레지스터(MBR): 메모리로부터 읽어온 데이터 또는 메모리에 써야 할 데이터를 가지고 있다.
- 입출력 주소 레지스터(I/O AR): 입출력 장치에 따른 입출력 모듈의 주소를 가지고 있다.
- 입출력 버퍼 레지스터(I/O BR): 입출력 모듈과 프로세서 간의 데이터 교환을 위해 사용된다.
4. 레지스터의 크기
레지스터는 일반적으로 저장할 수 있는 비트 수로 측정되며, ''8비트 레지스터'', ''32비트 레지스터'', ''64비트 레지스터'', ''128비트 레지스터'' 등이 있다. 일부 명령어 집합 아키텍처에서는 레지스터가 다양한 모드로 작동하여 저장 메모리를 더 작은 부분으로 나누어 (예: 32비트를 8비트 4개로) 여러 데이터(벡터, 또는 데이터의 1차원 배열)를 동시에 로드하고 처리할 수 있는데, 이는 메모리를 더 큰 레지스터로 매핑하는 추가 레지스터를 추가하여 구현된다. 여러 데이터에 대해 단일 명령을 실행할 수 있는 프로세서를 벡터 프로세서라고 한다.
소프트웨어 자산의 유효 활용을 목적으로 16비트 프로세서의 명령어 집합을 그대로 동작시킬 수 있는 32비트 프로세서 등이 종종 개발된다. 이 경우 프로세서 내부 레지스터의 비트 길이는 커지지만(대개 2배로) 호환성을 유지하기 위해 이전 CPU의 명령어 코드로 동작할 때는 하위 비트만 사용한다.
인텔 8086 계열 CPU는 이처럼 확장되어 온 과정을 거친 대표적인 프로세서이다. 8080(인텔의 8비트 CPU)에서는 범용 레지스터를 "a", "b", "c"… 등으로 명명했다. 이를 확장한 8086의 범용 레지스터는 "ax", "bx", "cx"…가 되었다 (x는 extend의 약자). 80386에서 32비트로 확장되면서 레지스터 이름은 "eax", "ebx", "ecx"…가 되었다 (e도 extend의 약자). AMD가 AMD64에서 64비트로 확장했을 때는 레지스터 이름이 "rax", "rbx", "rcx"…가 되었다.
5. 다양한 CPU 아키텍처에서의 레지스터
다양한 CPU 아키텍처는 각기 다른 수와 종류의 레지스터를 사용한다. 다음 표는 여러 주류 CPU 아키텍처의 레지스터 수를 보여준다.
프로세서 | 정수 레지스터 | FP 레지스터 |
---|---|---|
인텔 코어 듀오 | 8 | 8 |
인텔 코어 2 | 16 | 16 |
펜티엄 4 | 8 | 8 |
펜티엄 4 + EM64T | 16 | 16 |
애슬론 64 | 16 | 16 |
애슬론 MP | 8 | 8 |
옵테론 240 | 16 | 16 |
아이테니엄 2 | 128 | 128 |
울트라 SPARC IIIi | 32 | 32 |
POWER3 | 32 | 32 |
6502 | 3 | 0 |
x86 호환 프로세서에서 스택 포인터(ESP
)는 정수 레지스터로 간주되지만, 내용에 대해 작동하는 데 사용할 수 있는 명령어 수가 제한되어 있다. 대부분의 아키텍처에도 비슷한 주의 사항이 적용된다.
아래 나열된 모든 아키텍처는 서로 다르지만, 거의 모두 헝가리계 미국인 수학자 존 폰 노이만이 처음 제안한 폰 노이만 아키텍처로 알려진 기본 배열에 있다. 또한 GPU의 레지스터 수가 CPU의 레지스터 수보다 훨씬 많다는 점도 주목할 만하다.
아키텍처 | GPR/데이터+주소 레지스터 | FP 레지스터 | 비고 |
---|---|---|---|
AT&T 호빗 | 0 | 7개의 스택 | 모든 데이터 조작 명령은 레지스터 내에서만 작동하며, 처리하기 전에 데이터를 레지스터로 이동해야 한다. |
Cray-1[3] | 8개의 스칼라 데이터, 8개의 주소 | 스칼라 데이터 레지스터는 정수 또는 부동 소수점일 수 있으며, 64개의 스칼라 스크래치 패드 T 레지스터와 64개의 주소 스크래치 패드 B 레지스터도 있다. | |
4004[4] | 1개의 누산기, 16개 기타 | 0 | |
8008[5] | 1개의 누산기, 6개 기타 | 0 | A 레지스터는 모든 산술 연산이 수행되는 누산기이다. H 및 L 레지스터는 주소 레지스터로 함께 사용할 수 있다. 모든 레지스터는 로드/저장/이동/증가/감소 명령어 및 산술 명령어의 다른 피연산자로 사용할 수 있다. 부동 소수점 장치(FPU)는 사용할 수 없다. |
8080[6] | 1개의 누산기, 1개의 스택 포인터, 6개 기타 | 0 | A 레지스터는 모든 산술 연산이 수행되는 누산기이다. 레지스터 쌍 B+C, D+E 및 H+L은 일부 명령어에서 주소 레지스터로 사용할 수 있다. 모든 레지스터는 로드/저장/이동/증가/감소 명령어 및 산술 명령어의 다른 피연산자로 사용할 수 있다. 일부 명령어는 H+L만 사용한다. 다른 명령어는 H+L과 D+E를 교환한다. 8080용 부동 소수점 프로세서는 Intel 8231, AMD Am9511 및 Intel 8232였다. 또한 Z80 및 유사한 프로세서와도 쉽게 사용할 수 있었다. |
iAPX432 | 0 | 6개의 스택 | 스택 머신 |
16비트 x86[7] | 8 | 8086/8088, 80186/80188 및 80286 프로세서는 부동 소수점 연산을 위한 8087, 80187 또는 80287 코프로세서를 제공하는 경우, 스택 상단과 관련된 레지스터를 피연산자로 사용할 수 있는 일부 명령어를 사용하여 80비트 너비의 8단 레지스터 스택을 지원한다. 코프로세서가 없으면 부동 소수점 레지스터가 지원되지 않는다. | |
IA-32[8] | 8 | 80386 프로세서는 부동 소수점 연산을 위해 80387이 필요하며, 이후 프로세서에는 내장 부동 소수점이 있으며, 스택 상단과 관련된 레지스터를 피연산자로 사용할 수 있는 일부 명령어를 사용하여 80비트 너비의 8단 레지스터 스택이 있다. Pentium III 이상에는 추가 128비트 XMM 레지스터가 있는 SSE가 있었다. | |
x86-64[8][9] | 16 | FP 레지스터는 128비트 XMM 레지스터이며, 나중에 AVX/AVX2를 통해 256비트 YMM 레지스터로, AVX-512를 통해 512비트 ZMM0–ZMM31 레지스터로 확장되었다.[10] | |
Fairchild F8[11] | 1개의 누산기, 64개의 스크래치패드 레지스터, 1개의 간접 스크래치패드 레지스터(ISAR) | 명령어는 처음 16개의 스크래치패드 레지스터를 직접 참조할 수 있으며 ISAR를 통해 모든 스크래치패드 레지스터에 간접적으로 액세스할 수 있다.[12] | |
Geode GX | 1개의 데이터, 1개의 주소 | 8 | Geode GX/Media GX/4x86/5x86는 Cyrix/National Semiconductor에서 만든 486/Pentium 호환 프로세서의 에뮬레이션이다. Transmeta와 마찬가지로 프로세서에는 x86 코드를 기본 코드로 변환하여 실행하는 변환 계층이 있었다. 128비트 SSE 레지스터를 지원하지 않고, 80비트 부동 소수점 레지스터의 80387 스택만 지원하며, AMD의 3DNow!를 부분적으로 지원한다. 기본 프로세서는 모든 목적에 대해 1개의 데이터 및 1개의 주소 레지스터만 포함하며 정수 연산을 위해 스크래치패드 SRAM 내에서 r1(기본), r2(데이터), r3(백 포인터) 및 r4(스택 포인터)의 4개의 32비트 명명 레지스터 경로로 변환된다. |
Sunplus μ'nSP | 8(sp, r1-r4, bp, sr, pc) | 0 | 대만 회사 Sunplus Technology의 16비트 프로세서로, VTech의 V.Smile 일련의 교육용 비디오 게임 콘솔과 2000년대 중반부터 시작된 많은 플러그인 TV 게임 및 비 브랜드 콘솔에 특히 사용되었다. |
VM Labs Nuon | 0 | 1 | VM Labs에서 개발하고 멀티미디어에 특화된 32비트 스택 머신 프로세서이다. 회사의 자체 Nuon DVD 플레이어 콘솔 라인과 ZaPit 게임의 Game Wave Family Entertainment System에서 찾을 수 있다. 이 디자인은 Intel의 MMX 기술의 영향을 많이 받았으며, 벡터 및 스칼라 명령어 모두에 대한 128바이트 통합 스택 캐시를 포함했다. 통합 캐시는 뱅크 이름 변경을 통해 8개의 128비트 벡터 레지스터 또는 32개의 32비트 SIMD 스칼라 레지스터로 분할할 수 있다. 이 아키텍처에는 정수 레지스터가 없다. |
Nios II[13][14] | 31 | 8 | Nios II는 MIPS IV 명령어 집합을 기반으로 하며 31개의 32비트 GPR이 있으며, 레지스터 0은 하드와이어로 0이고, 8개의 64비트 부동 소수점 레지스터가 있다. |
Motorola 6800[15] | 2개의 데이터, 1개의 인덱스, 1개의 스택 | 0 | |
Motorola 68k[16] | 8개의 데이터(d0–d7), 8개의 주소(a0–a7) | 주소 레지스터 8(a7)은 스택 포인터이다. 68000, 68010, 68012, 68020 및 68030은 부동 소수점에 FPU가 필요하다. 68040에는 FPU가 내장되어 있다. FP 레지스터는 80비트이다. | |
SH 16비트 | 16 | 6 | |
Emotion Engine | 3(VU0)+ 32(VU1) | Emotion Engine의 메인 코어(VU0)는 일반 배경 작업용으로 설계된 고도로 수정된 DSP 일반 코어이며, 1개의 64비트 누산기, 2개의 일반 데이터 레지스터 및 1개의 32비트 프로그램 카운터를 포함한다. 수정된 MIPS III 실행 코어(VU1)는 게임 데이터 및 프로토콜 제어용이며, 정수 계산을 위한 32개의 32비트 범용 레지스터와 SIMD 명령어, 스트리밍 데이터 값 및 일부 정수 계산 값을 저장하기 위한 32개의 128비트 SIMD 레지스터, 코프로세서의 벡터 레지스터 파일에 일반 부동 소수점 계산을 연결하기 위한 1개의 누산기 레지스터를 포함한다. 코프로세서는 32개 항목 128비트 벡터 레지스터 파일(CPU의 누산기에서 전달되는 벡터 값만 저장할 수 있음)을 통해 구축되며 정수 레지스터는 내장되어 있지 않습니다. 벡터 코프로세서(VPU 0/1)와 Emotion Engine의 전체 메인 프로세서 모듈(VU0 + VU1 + VPU0 + VPU1)은 수정된 MIPS 명령어 집합을 기반으로 구축되었다. 이 경우 누산기는 범용이 아니라 제어 상태이다. | |
CUDA[17] | 스레드당 최대 255개 구성 가능 | 이전 세대는 스레드당 최대 127/63개의 레지스터를 허용했다.(Tesla/Fermi). 스레드당 더 많은 레지스터를 구성할수록 동시에 실행할 수 있는 스레드가 줄어듭니다. 레지스터는 32비트 너비입니다. 배정밀도 부동 소수점 숫자와 64비트 포인터에는 두 개의 레지스터가 필요합니다. 또한 스레드당 최대 8개의 술어 레지스터가 있다.[18] | |
CDC 6000 시리즈[19] | 16 | 8 | 8개의 A 레지스터, A0–A7은 18비트 주소를 저장한다. 8개의 B 레지스터, B0–B7은 18비트 정수 값을 저장한다(B0은 영구적으로 0으로 설정됨). 8개의 X 레지스터, X0–X7은 60비트의 정수 또는 부동 소수점 데이터를 저장한다. 8개의 18비트 A 레지스터 중 7개는 해당 X 레지스터에 연결되었다. A1–A5 레지스터 중 하나를 값으로 설정하면 해당 주소의 내용이 해당 X 레지스터로 메모리 로드되었다. 마찬가지로, A6 또는 A7 레지스터에 주소를 설정하면 X6 또는 X7에서 해당 위치로의 메모리 저장이 발생했다. (레지스터 A0과 X0은 이처럼 연결되지 않았습니다). |
System/360,[20] System/370,[21] System/390, z/Architecture[22] | 16 | FP는 System/360에서 선택 사항이었고 S/370 이상에서는 항상 존재했습니다. 벡터 기능이 있는 프로세서에는 머신 종속적인 32비트 요소 수가 포함된 16개의 벡터 레지스터가 있습니다.[23] 일부 레지스터는 호출 규칙에 의해 고정된 용도로 지정됩니다. 예를 들어, 레지스터 14는 서브루틴 반환 주소로 사용되며, ELF ABI의 경우 레지스터 15는 스택 포인터로 사용됩니다. S/390 G5 프로세서는 부동 소수점 레지스터 수를 16개로 늘렸습니다.[24] | |
MMIX[25] | 256 | 256 | 1990년대 후반 도널드 커누스가 교육적 목적으로 설계한 명령어 집합입니다. |
NS320xx[26] | 8 | 8 (FP가 있는 경우) | | |
Xelerated X10 | 1 | 32 | 수정된 MIPS 명령어 집합과 128비트 부동 소수점 장치가 있는 32/40비트 스택 머신 기반 네트워크 프로세서이다. |
Parallax Propeller | 0 | 2 | 내부에 간단한 논리 회로가 있는 8코어 8/16비트 슬라이스 스택 머신 컨트롤러로, 각각 3개의 8/16비트 특수 제어 레지스터와 32비트 x 512 스택 RAM을 포함하는 8개의 코어 카운터(코어)가 있습니다. 그러나 정수 용도의 일반 레지스터는 포함하지 않습니다. 최신 프로세서 및 멀티 코어 시스템의 대부분의 섀도 레지스터 파일과 달리, 코어의 모든 스택 RAM은 명령 수준에서 액세스할 수 있으므로, 필요한 경우 이러한 모든 코어가 단일 범용 코어로 작동할 수 있습니다. 부동 소수점 장치는 외부에 있으며 2개의 80비트 벡터 레지스터가 포함되어 있습니다. |
Itanium[27] | 128 | 128 | 64개의 1비트 술어 레지스터와 8개의 분기 레지스터가 있습니다. FP 레지스터는 82비트입니다. |
SPARC[28] | 31 | 32 | 글로벌 레지스터 0은 하드와이어로 0입니다. 레지스터 윈도우를 사용합니다. |
IBM POWER | 32 | 32 | 링크 레지스터, 카운트 레지스터 및 곱하기 몫(MQ) 레지스터도 포함되어 있습니다. |
PowerPC/Power ISA[29] | 32 | 32 | 링크 레지스터와 카운트 레지스터도 포함되어 있습니다. 벡터 기능을 지원하는 프로세서에는 32개의 128비트 벡터 레지스터도 있습니다. |
Blackfin[30] | 8개의 데이터, 2개의 누산기, 6개의 주소 | 0 | 스택 포인터와 프레임 포인터도 포함되어 있습니다. 추가 레지스터는 제로 오버헤드 루프 및 원형 버퍼 DAG(데이터 주소 생성기)를 구현하는 데 사용됩니다. |
IBM Cell SPE | 128 | 정수, 주소 또는 부동 소수점 값을 저장할 수 있는 128개의 범용 레지스터[31] | |
PDP-10 | 16 | 모든 레지스터는 일반적으로 사용할 수 있습니다(정수, 부동 소수점, 스택 포인터, 점프, 인덱싱 등). 모든 36비트 메모리(또는 레지스터) 워드는 반 워드로 조작할 수도 있으며, 이를 (18비트) 주소로 간주할 수 있습니다. 특정 명령어에서 다른 워드 해석이 사용됩니다. 원래 PDP-10 프로세서에서 이러한 16개의 GPR은 또한 메인(예: 코어) 메모리 위치 0–15에 해당했습니다. "빠른 메모리"라는 하드웨어 옵션은 레지스터를 별도의 IC로 구현했으며, 메모리 위치 0–15에 대한 참조는 IC 레지스터를 참조했습니다. 이후 모델은 레지스터를 "빠른 메모리"로 구현하고 메모리 위치 0–15가 이를 계속 참조하도록 했습니다. 이동 명령은 (레지스터, 메모리) 피연산자를 사용합니다. 는 레지스터-레지스터이고, 는 메모리에서 레지스터로 이동하는 것입니다. | |
PDP-11 | 7 | R7은 프로그램 카운터입니다. 모든 레지스터는 스택 포인터가 될 수 있지만 R6은 하드웨어 인터럽트 및 트랩에 사용됩니다. | |
VAX[32] | 16 | 범용 레지스터는 부동 소수점 값에도 사용됩니다. 레지스터 중 3개는 특수한 용도로 사용됩니다. R12(인수 포인터), R13(프레임 포인터) 및 R14(스택 포인터)이고, R15는 프로그램 카운터를 나타냅니다. | |
Alpha[33] | 31 | 31 | 레지스터 R31(정수) 및 F31(부동 소수점)은 하드와이어로 0입니다. |
6502 | 1개의 데이터, 2개의 인덱스 | 0 | 6502의 내용 A(누산기) 레지스터는 주요 목적 데이터 저장소 및 메모리 주소(8비트 데이터/16비트 주소)이며, X와 Y는 간접 및 직접 인덱스 레지스터(각각)이고 SP 레지스터는 특정 인덱스만 해당됩니다. |
W65C816S | 1 | 0 | 65c816은 6502의 16비트 후속 제품입니다. X, Y 및 D(직접 페이지 레지스터)는 조건 레지스터이고 SP 레지스터는 특정 인덱스만 해당됩니다. 주요 누산기는 16비트(C)[34]로 확장되었으며, 호환성을 위해 8비트(A)를 유지하고, 이제 메인 레지스터는 최대 24비트(16비트 너비 데이터 명령어/24비트 메모리 주소)까지 주소를 지정할 수 있습니다. |
MeP | 4 | 8 | 미디어 임베디드 프로세서는 수정된 8080 명령어 집합을 가진 도시바에서 개발한 32비트 프로세서입니다. A, B, C 및 D 레지스터만 모든 모드(8/16/32비트)를 통해 사용할 수 있습니다. x86과 호환되지 않지만 x87과 호환되는 80비트 부동 소수점 장치를 포함합니다. |
PIC 마이크로컨트롤러 | 1 | 0 | |
AVR 마이크로컨트롤러 | 32 | 0 | |
ARM 32비트(ARM/A32, Thumb-2/T32) | 14 | r15는 프로그램 카운터이며 범용 레지스터로 사용할 수 없습니다. r13은 스택 포인터입니다. r8–r13은 프로세서 모드 전환 시 다른 레지스터(뱅크)로 전환할 수 있습니다. 이전 버전에는 26비트 어드레싱이 있었고,[35] 프로그램 카운터(r15)의 상위 비트를 상태 플래그에 사용하여 해당 레지스터를 32비트로 만들었습니다. | |
ARM 32비트(Thumb) | 8 | 16 | 레지스터 r0에서 r7에 대한 액세스만 지원하는 Thumb 버전 1[36] |
ARM 64비트(A64) [37] | 31 | 32 | 레지스터 r31은 스택 포인터이거나 컨텍스트에 따라 하드와이어로 0입니다. |
MIPS[38] | 31 | 32 | 정수 레지스터 0은 하드와이어로 0입니다. |
RISC-V[39] | 31 | 32 | 정수 레지스터 0은 하드와이어로 0입니다. 매우 제한된 리소스를 가진 시스템을 위한 RV32E 변형에는 15개의 정수 레지스터가 있습니다. |
Epiphany | 64개(코어당)[40] | 각 명령어는 레지스터를 정수로 해석할지, 단정밀도 부동 소수점으로 해석할지 제어합니다. 아키텍처는 현재 사용 가능한 16개 및 64개 코어 구현을 통해 4096개 코어로 확장 가능합니다. |
6. 레지스터와 프로그래밍
프로그래밍 언어를 기계어로 변환할 때, 수식 평가 중간의 값 등은 메모리에 쓰지 않고 레지스터에 보관하여 계산하는 것이 효율적이다. 가능하다면 변수 자체도 레지스터에 할당하는 것이 더 효율적이다. 이러한 레지스터 운용 문제를 레지스터 할당이라고 하며, 컴파일러 최적화의 중요한 주제 중 하나이다.[42]
초기 C 언어 컴파일러는 최적화에 크게 신경 쓰지 않아, 프로그래머가 레지스터에 할당할 변수를 지정하는 키워드 `register`를 사용했다. 그러나 현재의 최적화 컴파일러는 `register` 지정을 무시한다. C++에서도 마찬가지였지만, C++11에서는 `register` 키워드가 권장되지 않았고, C++17에서는 삭제되었다(단, 예약어로 남았다).[42]
서브루틴과의 정보 교환(인수와 반환값)은 프로그램을 모듈로 분할하여 컴파일하기 위해 미리 정해두어야 하며, 이를 호출 규약이라고 한다. 호출 규약에는 여러 종류가 있지만, 레지스터가 많은 머신에서는 레지스터로 정보를 주고받는 것이 효율적이며, 이를 레지스터 전달이라고 한다. SPARC 등의 RISC 프로세서나 EPIC 아키텍처에는 아키텍처적으로 이를 지원하는 레지스터 윈도우가 있다. 레지스터 전달과 반대로 스택으로 전달하는 것을 스택 전달이라고 한다. 인수를 스택에 쌓아 서브루틴을 호출하지만, 반환값은 레지스터(누산기)로 반환하는 경우가 많다.
PC에서 널리 사용되는 x86의 경우(w:X86 calling conventions), IA-32 및 그 이전 프로세서에서는 컴파일러가 생성하는 코드에서 스택 전달이 많았지만, 최적화된 컴파일러에서는 Microsoft C의 `__fastcall` 구문으로 레지스터 전달을 명시하거나, 가능한 한 레지스터 전달을 하는 코드를 생성하는 LSI C-86도 있다. x64에는 Microsoft x64와 System V AMD64 두 종류가 있지만, 둘 다 레지스터 전달이 기본이다.
가변 인수를 레지스터로 전달하는 것은 어렵기 때문에, 가변 인수일 경우에는 스택 전달을 하는 경우도 많다.
7. 특수 아키텍처
레지스터 세트(Register set)는 빠른 컨텍스트 스위칭을 위해 여러 개의 레지스터 그룹을 사용하는 방식이다. 자일로그사의 CPU Z80은 이중 레지스터를 가지고 있어, 레지스터 세트를 사용한 컨텍스트 스위칭을 지원하는 대표적인 프로세서이다.[4] 최근 프로세서 중에서는 ARM이 레지스터 세트를 가지고 있다.[4] 이러한 방식은 처리 속도를 높일 수 있지만, 레지스터를 구성하는 회로가 복잡하여 프로세서에 많이 구현하기 어렵다는 단점이 있다.[4]
제로 레지스터(Zero register)는 읽을 때 항상 0을 반환하는 레지스터로, 명령 집합을 단순화하는 데 사용된다. MIPS는 R0 레지스터가 항상 0을 반환하는 제로 레지스터이다.[3] 제로 레지스터와 연산 명령을 조합하면 다른 명령과 동일한 처리를 수행할 수 있다.[3] 예를 들어, 덧셈 명령에서 A=B+Z (A, B는 범용 레지스터, Z는 제로 레지스터)를 실행하면 B의 값이 A에 들어가 B 레지스터에서 A 레지스터로 데이터를 전송하는 MOV 또는 LD 명령과 같아진다.[3]
8. 결론
프로세서 내부의 레지스터는 계산 결과를 일시적으로 저장하거나, 메인 메모리에 접근할 때의 주소를 보존하고, 프로세서 및 주변 기기의 동작 상태를 제어하는 역할을 한다. 프로세서의 동작은 프로그램 코드에 따라 메인 메모리와 레지스터 사이에서 데이터를 주고받는 것이라고 할 수 있다.[1]
프로세서 내부에는 보통 수 개에서 수십 개의 레지스터가 있으며, 내부 버스나 연산 회로 등과 밀접하게 연결되어 고속으로 동작한다.[1]
프로세서의 구조(아키텍처)와 명령 집합은 내부에 어떤 레지스터가 있는지와 밀접하게 관련된다.[1]
참조
[1]
웹사이트
What is a processor register?
https://www.educativ[...]
2022-08-12
[2]
웹사이트
A Survey of Techniques for Designing and Managing CPU Register File
https://www.research[...]
[3]
웹사이트
Cray-1 Computer System Hardware Reference Manual
http://www.bitsavers[...]
Cray Research
2022-12-23
[4]
웹사이트
MCS-4 Micro Computer Set Users Manual
https://bitsavers.co[...]
Intel
1973-02
[5]
웹사이트
8008 8 Bit Parallel Central Processor Unit Users Manual
http://bitsavers.inf[...]
Intel
2014-01-23
[6]
웹사이트
Intel 8080 Microcomputer Systems User's Manual
https://bitsavers.tr[...]
Intel
2014-01-23
[7]
웹사이트
80286 and 80287 Programmer's Reference Manual
https://bitsavers.tr[...]
Intel
[8]
웹사이트
Intel 64 and IA-32 Architectures Software Developer Manuals
http://www.intel.com[...]
Intel
2019-12-04
[9]
웹사이트
AMD64 Architecture Programmer's Manual Volume 1: Application Programming
https://www.amd.com/[...]
AMD
2013-10
[10]
웹사이트
Intel Architecture Instruction Set Extensions and Future Features Programming Reference
https://software.int[...]
Intel
2018-01
[11]
서적
F8, Preliminary Microprocessor User's Manual
https://datasheets.c[...]
Fairchild
1975-01
[12]
서적
F8 Guide to Programming
http://www.bitsavers[...]
Fairchild MOS Microcomputer Division
[13]
웹사이트
Nios II Classic Processor Reference Guide
https://www.altera.c[...]
Altera
2015-04-02
[14]
웹사이트
Nios II Gen2 Processor Reference Guide
https://www.altera.c[...]
Altera
2015-04-02
[15]
웹사이트
M6800 Programming Reference Manual
http://www.bitsavers[...]
Motorola
2015-05-18
[16]
웹사이트
Motorola M68000 Family Programmer's Reference Manual
https://www.nxp.com/[...]
Motorola
2024-11-10
[17]
웹사이트
CUDA C Programming Guide
https://docs.nvidia.[...]
Nvidia
2020-01-09
[18]
arXiv
Dissecting the NVIDIA Volta GPU Architecture via Microbenchmarking
[19]
서적
Control Data 6000 Series Computer Systems, Reference Manual
http://bitsavers.inf[...]
Control Data Corporation
1965-07
[20]
서적
IBM System/360 Principles of Operation
https://bitsavers.tr[...]
IBM
[21]
서적
IBM System/370, Principles of Operation
http://bitsavers.inf[...]
IBM
1975-09-01
[22]
서적
z/Architecture, Principles of Operation
https://www.ibm.com/[...]
IBM
2008
[23]
웹사이트
IBM Enterprise Systems Architecture/370 and System/370 - Vector Operations
http://bitsavers.org[...]
IBM
2020-05-11
[24]
웹사이트
IBM S/390 G5 Microprocessor
https://old.hotchips[...]
[25]
웹사이트
MMIX Home Page
http://mmix.cs.hm.ed[...]
[26]
웹사이트
Series 32000 Databook
http://bitsavers.org[...]
National Semiconductor
[27]
서적
Intel Itanium Architecture, Software Developer's Manual, Volume 3: Intel Itanium Instruction Set Reference
https://www.intel.co[...]
Intel
2010-05
[28]
서적
The SPARC Architecture Manual, Version 9
https://www.cs.utexa[...]
SPARC International, Inc.
[29]
서적
Power ISA Version 3.1B
https://wiki.raptorc[...]
OpenPOWER Foundation
2021-09-14
[30]
서적
Blackfin Processor, Programming Reference, Revision 2.2
https://www.analog.c[...]
Analog Devices
2013-02
[31]
웹사이트
Synergistic Processor Unit Instruction Set Architecture Version 1.2
https://www-01.ibm.c[...]
IBM
2007-01-27
[32]
서적
VAX Architecture, Reference Manual
https://bitsavers.tr[...]
DEC books
1987
[33]
서적
Alpha Architecture Reference Manual
https://download.maj[...]
Compaq Computer Corporation
2002-01
[34]
웹사이트
Learning 65816 Assembly
https://wiki.superfa[...]
2019-11-14
[35]
웹사이트
Procedure Call Standard for the ARM Architecture
http://infocenter.ar[...]
ARM Holdings
2013-05-27
[36]
웹사이트
2.6.2. The Thumb-state register set
https://developer.ar[...]
ARM Holdings
[37]
서적
Arm A64 Instruction Set Architecture, Armv8, for Armv8-A architecture profile
https://student.cs.u[...]
Arm
2021
[38]
서적
MIPS64 Architecture For Programmers, Volume II: The MIPS64 Instruction Set
https://www.ece.lsu.[...]
RISC-V Foundation
2001-03-12
[39]
서적
The RISC-V, Instruction Set Manual, Volume I: User-Level ISA, Document Version 2.2
https://riscv.org/wp[...]
RISC-V Foundation
2017-05
[40]
웹사이트
Epiphany Architecture Reference
http://adapteva.com/[...]
[41]
서적
bit 単語帳
共立出版
1990-08-15
[42]
웹사이트
非推奨だったregisterキーワードを削除 - cpprefjp C++日本語リファレンス
https://cpprefjp.git[...]
본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.
문의하기 : help@durumis.com